﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sinacor.UI.Bovespa.Monitoracao.Model
{
    public class RouterMonitorEntity
    {
        public RouterMonitorEntity()
        {
            MsmqMonitor = new MsmqMonitorEntity();
            ErrorData = new ErrorData();
        }
        public int BlockProcessingAverageQuantity { get; set; }        //Média de Mensagens blocadas para Inserção no DB por vez
        public int LimitDataBaseInsertAverageTime { get; set; }//Limite Tempo médio de operação de insert em banco
        public int DataBaseInsertAverageTime { get; set; }//Tempo médio de operação de insert em banco
        public long DataBaseSucessfulConnectionRetries { get; set; }//Número de Re-Conexões com sucesso no BD
        public long DataBaseUnsucessfulConnectionRetries { get; set; }//Número de Tentativas Reconexão com Erro no BD
        public long MessagesDataBaseQueueQuantity { get; set; }//Numero de Mensagens na fila em Banco
        public long LimitMessagesDataBaseQueueQuantity { get; set; }//Limite Numero de Mensagens na fila em Banco

        public long MsmqConnectionsRetries { get; set; }        //Número de Tentativas Reconexão com MSMQ (Fila receptor)
        public int TranslatedMessagesForSecond { get; set; }//Mensagens Traduzidas por segundo
        public long MessagesReceivedQuantity { get; set; }//Número total de Mensagens Recebidas
        public long InternalQueuedMessages_01_Quantity { get; set; }//Numero Mensagens em Fila Interna #1
        public long LimitInternalQueuedMessages_01_Quantity { get; set; }//Limite Numero Mensagens em Fila Interna #1

        public int RoutedMessagesForSecond { get; set; }// Mensagens Roteadas por segundo
        public long DefaultFlowRoutedMessagesQuantity { get; set; }// (*1) Mensagens Roteadas para Fluxo Normal
        public long OptimizedRoutedMessagesQuantity { get; set; }// (*2) Mensagens Otimizadas
        public long HftRoutedMessagesQuantity { get; set; }// (*3) Mensagens Roteadas para HFT
        public long TotalRoutedMessagesQuantity { get; set; }// (*1) + (*2) + (*3) Total de Mensagens Roteadas
        public int MemoryControlledOrdersQuantity { get; set; }//Número de Ordens HFT em memória
        public long InternalQueuedMessages_02_Quantity { get; set; }// Numero Mensagens em Fila Interna #2
        public long LimitInternalQueuedMessages_02_Quantity { get; set; }        // Limite Numero Mensagens em Fila Interna #2

        public bool StopedBySomeQueueExceedsLimit { get; set; }// Roteador parado por alguma fila exceder o limite de mensagens
        public bool LimitStopedBySomeQueueExceedsLimit { get; set; }// Limite Roteador parado por alguma fila exceder o limite de mensagens

        ///ProcessData Information Begin
        //Limite
        public long LimitPrivateMemory { get; set; }//Private Memory
        public int LimitHandleCount { get; set; }//Handle Count
        public int LimitThreadCount { get; set; }//Thread Count

        //Informacao
        public long PrivateMemoryBytes { get; set; }//Private Memory
        public string PrivateMemory { get; set; }//Private Memory
        public int HandleCount { get; set; }//Handle Count
        public int ThreadCount { get; set; }//Thread Count
        public MsmqMonitorEntity MsmqMonitor { get; set; }

        public DateTime InitializedDate { get; set; }
        public TimeSpan UpTime { get; set; }
        public TimeSpan PrivilegedProcessorTime { get; set; }
        public string MachineIPAddress { get; set; }
        public string MachineName { get; set; }

        public ErrorData ErrorData { get; set; }
    }
}
